ASP.Net এ একাধিক ফাইল আপলোড (Multiple File Upload) একটি সাধারণ প্রয়োজনীয়তা, যেখানে একাধিক ফাইল এক সাথে সার্ভারে আপলোড করা হয়। ASP.Net MVC বা ASP.Net Core এ ফাইল আপলোড করার জন্য ফর্ম, কন্ট্রোলার, এবং ভিউ এর মাধ্যমে কাজ করতে হয়। একাধিক ফাইল আপলোডের জন্য সাধারণত IFormFile
ব্যবহৃত হয়। নিচে একাধিক ফাইল আপলোড করার প্রক্রিয়া বিস্তারিতভাবে ব্যাখ্যা করা হল।
প্রথমে, আমরা একটি মডেল তৈরি করি, যেখানে ফাইল গুলি আপলোড করা হবে। এখানে একটি List ব্যবহার করা হবে, যা একাধিক ফাইল সন্নিবেশিত করবে।
public class FileUploadViewModel
{
public List<IFormFile> Files { get; set; }
}
এখন, আপনাকে Razor ভিউতে একটি ফর্ম তৈরি করতে হবে, যেখানে ইউজার একাধিক ফাইল সিলেক্ট করতে পারবে। enctype="multipart/form-data"
অ্যাট্রিবিউটটি ফর্মে সেট করতে হবে যাতে ফাইলগুলি সার্ভারে সঠিকভাবে আপলোড করা যায়।
@model FileUploadViewModel
<form asp-action="UploadFiles" method="post" enctype="multipart/form-data">
<div>
<label>Select Files</label>
<input type="file" name="Files" multiple />
</div>
<button type="submit">Upload</button>
</form>
এখানে multiple
অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা ব্যবহারকারীদের একাধিক ফাইল সিলেক্ট করার অনুমতি দেয়।
কন্ট্রোলারে একটি POST অ্যাকশন তৈরি করতে হবে যা ফাইলগুলি গ্রহণ করবে এবং সার্ভারে আপলোড করবে।
public class FileUploadController : Controller
{
private readonly IWebHostEnvironment _environment;
public FileUploadController(IWebHostEnvironment environment)
{
_environment = environment;
}
[HttpPost]
public async Task<IActionResult> UploadFiles(FileUploadViewModel model)
{
if (model.Files != null && model.Files.Count > 0)
{
foreach (var file in model.Files)
{
if (file.Length > 0)
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", file.FileName);
// ফাইল সেভ করা
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
return RedirectToAction("Index");
}
return View();
}
}
এখানে, UploadFiles অ্যাকশনে FileUploadViewModel মডেলটি পাস করা হচ্ছে। ফাইলগুলি Files
প্রপার্টির মাধ্যমে অ্যাক্সেস করা হচ্ছে এবং CopyToAsync
মেথড ব্যবহার করে ফাইলগুলি সেভ করা হচ্ছে।
আপনি যেই ডিরেক্টরিতে ফাইলগুলো সেভ করবেন (যেমন "uploads"
), সেখানে যথাযথ লেখার অনুমতি থাকতে হবে। এটি নিশ্চিত করুন, বিশেষত ডিপ্লয়মেন্টের পর সার্ভারে।
ASP.Net Core এ Multiple File Upload করার প্রক্রিয়া প্রায় একই, তবে কিছু পার্থক্য থাকতে পারে। বিশেষ করে ASP.Net Core এ IFormFile
ব্যবহার করা হয় এবং এখানে WebHostEnvironment
ব্যবহার করে আপলোড ফোল্ডারের লোকেশন পাওয়া যায়।
public class FileUploadViewModel
{
public List<IFormFile> Files { get; set; }
}
@model FileUploadViewModel
<form asp-action="UploadFiles" method="post" enctype="multipart/form-data">
<div>
<label>Select Files</label>
<input type="file" name="Files" multiple />
</div>
<button type="submit">Upload</button>
</form>
public class FileUploadController : Controller
{
private readonly IWebHostEnvironment _environment;
public FileUploadController(IWebHostEnvironment environment)
{
_environment = environment;
}
[HttpPost]
public async Task<IActionResult> UploadFiles(FileUploadViewModel model)
{
if (model.Files != null && model.Files.Count > 0)
{
foreach (var file in model.Files)
{
if (file.Length > 0)
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", file.FileName);
// ফাইল সেভ করা
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
return RedirectToAction("Index");
}
return View();
}
}
যেখানে ফাইল সেভ করা হবে (এখানে "uploads"
ফোল্ডার), সেই ডিরেক্টরিতে লেখার অনুমতি থাকতে হবে।
ফাইল আপলোড করার সময় কিছু নিরাপত্তা বিষয়ক সতর্কতা মাথায় রাখতে হবে:
.jpg
, .png
, .pdf
ইত্যাদি)।if (file.Length > 0 && file.ContentType == "image/jpeg") // শুধুমাত্র JPEG ফাইল আপলোড
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", Path.GetFileName(file.FileName));
// আরও নিরাপত্তার জন্য ফাইল নাম sanitize করতে হবে
}
ASP.Net এ একাধিক ফাইল আপলোড করা একটি সাধারণ প্রয়োজনীয়তা, যা IFormFile
এবং Razor ভিউ এর মাধ্যমে করা হয়। Model, View, এবং Controller এর মাধ্যমে ফাইলগুলি সার্ভারে আপলোড করা সম্ভব। নিরাপত্তার জন্য ফাইলের ধরন এবং আকার যাচাই করা গুরুত্বপূর্ণ, এবং ফাইলের নামও sanitize করা উচিত।
Read more